


let glUtils = require('./utils/glUtils');
let cfg = require('./utils/cfg');

class RenderItem{

    // 只会包含3个渲染
    // 1.普通图片
    // 2.颜色矩形
    // 3.
    constructor() {
        this._vbo = null;
        this._ibo = null;
        this._count = 0; // 顶点个数
        this._drawMode = -1; // 绘制方式
        this._shader = null;
        this._texture = null;
        this._mvpMat = null;
        this._color = null;
        this._opacity = 1.0;
    }

    set(obj){
        this._vbo = obj.vbo;
        this._ibo = obj.ibo;
        this._count = obj.count;
        this._drawMode = obj.drawMode;
        this._shader = obj.shader;
        this._texture = obj.texture;
        this._mvpMat = obj.mvpMat;
        this._color = obj.color;
        this._opacity = (obj.opacity === void 0)?1.0:obj.opacity;
    }

    render(){
        let gl = cfg.gl;
        gl.useProgram(this._shader.program);

        // uniforms
        gl.uniformMatrix4fv(this._shader['mvpHandle'],false,this._mvpMat.data);
        if(this._color){
            gl.uniform3fv(this._shader['colorHandle'],this._color.data);
        }

        gl.uniform1f(this._shader['opacityHandle'],this._opacity);

        gl.bindBuffer(gl.ARRAY_BUFFER,this._vbo);
        if(this._texture){
            glUtils.enableBlend(gl);
            gl.vertexAttribPointer(this._shader['posHandle'],2,gl.FLOAT,false,4 * Float32Array.BYTES_PER_ELEMENT,0);
            gl.vertexAttribPointer(this._shader['texPosHandle'],2,gl.FLOAT,false,4 * Float32Array.BYTES_PER_ELEMENT,2 * Float32Array.BYTES_PER_ELEMENT);
            gl.enableVertexAttribArray(this._shader['posHandle']);
            gl.enableVertexAttribArray(this._shader['texPosHandle']);

            this._texture.useTexture();
            gl.uniform1i(this._shader['sampler0Handle'],0);
        }else{
            glUtils.disableBlend(gl);
            gl.enableVertexAttribArray(this._shader['posHandle']);
            gl.vertexAttribPointer(this._shader['posHandle'],2,gl.FLOAT,false,0,0);
        }

        if(this._ibo){
            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,this._ibo);
            gl.drawElements(this._drawMode,this._count,gl.UNSIGNED_SHORT,0);
        }else{
            gl.drawArrays(this._drawMode,0,this._count);
        }

        if(this._texture){
            gl.disableVertexAttribArray(this._shader['posHandle']);
            gl.disableVertexAttribArray(this._shader['texPosHandle']);
        }else{
            gl.disableVertexAttribArray(this._shader['posHandle']);
        }

        if(this._ibo){
            gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,null);
            gl.bindBuffer(gl.ARRAY_BUFFER,null);
        }else{
            gl.bindBuffer(gl.ARRAY_BUFFER,null);
        }
    }
}

module.exports = RenderItem;





//
//
// let glUtils = require('../utils/glUtils');
//
// class RenderItem{
//
//     // 只会包含3个渲染
//     // 1.普通图片
//     // 2.颜色矩形
//     // 3.
//     constructor() {
//         this._vbo = null;
//         this._ibo = null;
//         this._count = 0; // 顶点个数
//         this._drawMode = -1; // 绘制方式
//         this._shader = null;
//         this._texture = null;
//         this._mvpMat = null;
//         this._color = null;
//     }
//
//     set(obj){
//         this._vbo = obj.vbo;
//         this._ibo = obj.ibo;
//         this._count = obj.count;
//         this._drawMode = obj.drawMode;
//         this._shader = obj.shader;
//         this._texture = obj.texture;
//         this._mvpMat = obj.mvpMat;
//         this._color = obj.color;
//     }
//
//     render(){
//         let gl = window.app.gl;
//         gl.useProgram(this._shader.program);
//
//         // uniforms
//         gl.uniformMatrix4fv(this._shader['mvpHandle'],false,this._mvpMat.data);
//         if(this._color){
//             gl.uniform3fv(this._shader['colorHandle'],this._color.data);
//         }
//
//         gl.bindBuffer(gl.ARRAY_BUFFER,this._vbo);
//         if(this._texture){
//             glUtils.enableBlend(gl);
//             gl.vertexAttribPointer(this._shader['posHandle'],2,gl.FLOAT,false,4 * Float32Array.BYTES_PER_ELEMENT,0);
//             gl.vertexAttribPointer(this._shader['texPosHandle'],2,gl.FLOAT,false,4 * Float32Array.BYTES_PER_ELEMENT,2 * Float32Array.BYTES_PER_ELEMENT);
//             gl.enableVertexAttribArray(this._shader['posHandle']);
//             gl.enableVertexAttribArray(this._shader['texPosHandle']);
//
//             this._texture.useTexture();
//             gl.uniform1i(this._shader['sampler0Handle'],0);
//         }else{
//             glUtils.disableBlend(gl);
//             gl.enableVertexAttribArray(this._shader['posHandle']);
//             gl.vertexAttribPointer(this._shader['posHandle'],2,gl.FLOAT,false,0,0);
//         }
//
//         if(this._ibo){
//             gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,this._ibo);
//             gl.drawElements(this._drawMode,this._count,gl.UNSIGNED_SHORT,0);
//         }else{
//             gl.drawArrays(this._drawMode,0,this._count);
//         }
//
//         if(this._texture){
//             gl.disableVertexAttribArray(this._shader['posHandle']);
//             gl.disableVertexAttribArray(this._shader['texPosHandle']);
//         }else{
//             gl.disableVertexAttribArray(this._shader['posHandle']);
//         }
//
//         if(this._ibo){
//             gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,null);
//             gl.bindBuffer(gl.ARRAY_BUFFER,null);
//         }else{
//             gl.bindBuffer(gl.ARRAY_BUFFER,null);
//         }
//     }
// }
//
// module.exports = RenderItem;
